
int main()
{
    // 异步解决了cpu等待浪费问题，协程解决了异步啰嗦的问题
    // 很像js的从promise到async-await
    // c++是一套接口，具体任务内部如何运行还得你自己定义，js是别人定义好的

    // 1. 协程的本质是暂停的函数
    //      协程是一种可以暂停和恢复执行的函数。它允许函数在执行过程中暂停，等待某个异步操作完成后再继续执行。
    //      这与传统的函数不同，传统函数一旦开始执行，就会一直运行直到结束。
    // 2. 在运行期间把函数context暂存到heap上
    //      协程的上下文（包括局部变量、执行状态等）通常会被保存在堆（heap）上。这样做的好处是，即使函数暂停了，它的上下文也不会被销毁，可以在后续恢复执行时继续使用。
    // 3. 等待从heap读取函数、进行下一次执行
    //      当协程被暂停时，它的上下文被保存在堆上，等待某个事件（如异步操作完成）触发后，协程可以从中断的地方继续执行。
    //      这个过程通常由一个协程调度器（coroutine scheduler）来管理，调度器负责在合适的时机恢复协程的执行。
    // 4、协程的线程切换
    //      在多线程环境中，协程的执行可以跨越不同的线程。具体来说，协程被挂起时，它的上下文会被保存，
    //      而当协程被唤醒时，可以在任何线程中恢复执行。

    // 调度器：为了防止数据竞争（data race）和死锁（deadlock）
    // 1、调度器可以为某一类型的任务提高权重抢占cpu
    // 2、调度器在分时操作系统和实时操作系统上实现并不一样
    // 3、调度器和编程语言无关，更像一种工程实现

    return 0;
}
